package cn.com.xy.sms.sdk.number;

import java.io.File;
import java.util.Map;

import android.content.Context;
import cn.com.xy.sms.sdk.Iservice.XyCallBack;
import cn.com.xy.sms.sdk.util.RunnableManager;
import cn.com.xy.sms.sdk.util.ThreadPoolManager;

/* SDK-428 huangzhiqiang 20160607 start */
public class ParseNumberManager {

    static {
        RunnableManager.executeRunnableByPool(ThreadPoolManager.LOACTION, RunnableManager.LOCATION);
    }

    /**
     * 初始化内嵌号码数据
     * 
     * @param context
     */
    public static void initEmbedNumber(final Context context) {
        InitEmbedNumber.init(context);
    }

    /**
     * 根据号码获取号码数据来源名称
     * 
     * @param num 号码
     * @return
     */
    public static String getNumberSourceName(String num) {
        return NumberSourceUtil.getNumberSourceName(num);
    }

    /**
     * 根据号码获取号码数据
     * 
     * @param num 号码
     * @param extend 扩展参数，配置ParseNumberManager.QUERY_DB_RUN_IN_CURRENT_THREAD:
     *            true可在当前线程执行数据库查询， 否则默认在新线程执行这些操作
     * @param isScrolling 滚动条是否正在滚动(true:是 false:否)，滚动条滚动时不进行联网查询操作
     * @param callBack 
     *            index0(状态，一般只需关注CURRENT_THREAD_HAS_DATA、HAS_DATA这两个状态):
     *                  CallBackState.CURRENT_THREAD_HAS_DATA:当前线程，成功获取号码数据
     *                  CallBackState.CURRENT_THREAD_NO_DATA:当前线程，暂时没有号码数据
     *                  CallBackState.CURRENT_THREAD_NEED_QUERY:当前线程，需要查询数据
     *                  CallBackState.CURRENT_THREAD_SCROLLING:当前线程，滚动条正在滚动，不查询数据库及网络数据
     *                  CallBackState.HAS_DATA:当前线程或新线程，成功获取号码数据
     *                  CallBackState.NO_DATA:当前线程或新线程，暂无号码数据
     *                  CallBackState.ERROR:当前线程或新线程，存在异常，获取号码数据失败
     *            index1:num
     *            index2:
     *                  (index0 == CallBackState.CURRENT_THREAD_HAS_DATA 
     *                  || index0 == CallBackState.HAS_DATA):JSONObject类型 号码数据,例:
     *                           {"pubnum":"10086","numtype":1,"name":"中国移动","area":"广东",
     *                           "version":"201606061325", "logo":"af3647264b2c71fd6c03cf9f5e708bdb.png"}
     *                  (index0 != CallBackState.HAS_DATA && index0 != CallBackState.HAS_DATA):String类型 提示信息
     * @return
     */
    public static void queryByNum(final String num, final Map<String, String> extend, boolean isScrolling,
            final XyCallBack callBack) {
        ParseNumberUtil.queryByNum(num, extend, isScrolling, callBack);
    }

    /**
     * 上传用户标记
     * 
     * @param num 号码
     * @param tag 用户标记内容
     * @param tagType 用户标记内容类型(1:系统预制类型 2:自定义类型)
     * @param extend 扩展参数
     * @param callBack 
     *            index0(状态，一般只需关注UPLOAD_COMPLETE状态):
     *                  CallBackState.UPLOAD_COMPLETE:新线程，上传完成
     *                  CallBackState.ERROR:当前线程或新线程，存在异常，上传失败
     *            index1:num
     *            index2:
     *                  (index0 == CallBackState.UPLOAD_COMPLETE):上传完成时间
     *                  (index0 == CallBackState.ERROR):String类型 异常信息
     */
    public static void uploadUserTag(String num, String tag, int tagType, final Map<String, String> extend,
            XyCallBack callBack) {
        UserTagUtil.uploadUserTag(num, tag, tagType, extend, callBack);
    }

    /**
     * 删除用户标记内容
     * 
     * @param num 号码
     * @param extend 扩展参数
     */
    public static void removeUserTag(String num, Map<String, String> extend) {
        UserTagUtil.removeUserTag(num, extend);
    }

    /**
     * 获取数据源提供商logo
     * 
     * @param ctx
     * @param num 号码
     * @param extend 扩展参数
     * @param callBack 
     *            index0(状态，一般只需关注CURRENT_THREAD_HAS_DATA、DOWNLOAD_COMPLETE这两个状态):
     *                  CallBackState.CURRENT_THREAD_HAS_DATA:当前线程，存在logo文件
     *                  CallBackState.CURRENT_THREAD_REPEAT_REQUEST:当前线程，重复logo下载请求
     *                  CallBackState.CURRENT_THREAD_NEED_DOWNLOAD:当前线程，需要下载logo文件
     *                  CallBackState.DOWNLOAD_COMPLETE:当前线程或新线程，成功下载文件
     *                  CallBackState.DOWNLOAD_FAILED:当前线程或新线程，文件下载失败
     *                  CallBackState.ERROR:当前线程或新线程，存在异常，文件下载失败
     *            index1:logoName 
     *            index2:
     *                  (index0 == CallBackState.DOWNLOAD_COMPLETE):文件的File对象 
     *                  (index0 == CallBackState.DOWNLOAD_FAILED):"download failed"
     *                  (index0 == CallBackState.ERROR):String类型 异常信息
     * @return
     */
    public static File findUnionLogoFile(Context ctx, final String num, Map<String, String> extend,
            final XyCallBack callBack) {
        return NumberLogoUtil.findUnionLogoFile(ctx, num, extend, callBack);
    }

    /**
     * 获取号码logo
     * 
     * @param ctx
     * @param num 号码
     * @param extend 扩展参数
     * @param callBack 
     *            index0(状态，一般只需关注CURRENT_THREAD_HAS_DATA、DOWNLOAD_COMPLETE这两个状态):
     *                  CallBackState.CURRENT_THREAD_HAS_DATA:当前线程，存在logo文件
     *                  CallBackState.CURRENT_THREAD_REPEAT_REQUEST:当前线程，重复logo下载请求
     *                  CallBackState.CURRENT_THREAD_NEED_DOWNLOAD:当前线程，需要下载logo文件
     *                  CallBackState.DOWNLOAD_COMPLETE:当前线程或新线程，成功下载文件
     *                  CallBackState.DOWNLOAD_FAILED:当前线程或新线程，文件下载失败
     *                  CallBackState.ERROR:当前线程或新线程，存在异常，文件下载失败
     *            index1:num 
     *            index2:
     *                  (index0 == CallBackState.DOWNLOAD_COMPLETE):文件的File对象 
     *                  (index0 == CallBackState.DOWNLOAD_FAILED):"download failed"
     *                  (index0 == CallBackState.ERROR):String类型 异常信息
     * @return
     */
    public static File findLogoFile(final Context ctx, final String num, Map<String, String> extend,
            final XyCallBack callBack) {
        return NumberLogoUtil.findLogoFile(ctx, num, extend, callBack);
    }

	/* IMOO-9 likuangkuang 20161014 start */
    public static void upgradeEmbedNumber(final XyCallBack callBack) {
        /* IMOO-14 likuangkuang 20161018 start */
        // move the removecache() right after upgrade successfully finished
        UpgradeEmbedNumber.upgrade(callBack);
        /* IMOO-14 likuangkuang 20161018 end */
    }
	/* IMOO-9 likuangkuang 20161014 end */
}
/* SDK-428 huangzhiqiang 20160607 end */